using System;
using System.Collections.Generic;
using ns26;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("DeckMaker")]
	public class DeckMaker : MonoClass
	{
		[Attribute38("DeckMaker.DeckChoiceFill")]
		public class DeckChoiceFill : MonoClass
		{
			public EntityDef m_removeTemplate => method_3<EntityDef>("m_removeTemplate");

			public List<EntityDef> m_addChoices => method_3<Class271<EntityDef>>("m_addChoices")?.method_25();

			public string m_reason => method_4("m_reason");

			public DeckChoiceFill(IntPtr address, string className)
				: base(address, className)
			{
			}

			public DeckChoiceFill(IntPtr address)
				: this(address, "DeckChoiceFill")
			{
			}

			public DeckFill GetDeckFillChoice(int idx)
			{
				return method_14<DeckFill>("GetDeckFillChoice", new object[1] { idx });
			}
		}

		[Attribute38("DeckMaker.DeckFill")]
		public class DeckFill : MonoClass
		{
			public EntityDef m_removeTemplate => method_3<EntityDef>("m_removeTemplate");

			public EntityDef m_addCard => method_3<EntityDef>("m_addCard");

			public string m_reason => method_4("m_reason");

			public DeckFill(IntPtr address, string className)
				: base(address, className)
			{
			}

			public DeckFill(IntPtr address)
				: this(address, "DeckFill")
			{
			}
		}

		[Attribute38("DeckMaker.CardRequirements")]
		public class CardRequirements : MonoClass
		{
			public int m_requiredCount => method_2<int>("m_requiredCount");

			public string m_reason => method_4("m_reason");

			public CardRequirements(IntPtr address, string className)
				: base(address, className)
			{
			}

			public CardRequirements(IntPtr address)
				: this(address, "CardRequirements")
			{
			}

			public string GetRequirementReason()
			{
				return method_13("GetRequirementReason");
			}
		}

		[Attribute38("DeckMaker.SortableEntityDef")]
		public class SortableEntityDef : MonoClass
		{
			public EntityDef m_entityDef => method_3<EntityDef>("m_entityDef");

			public int m_suggestWeight => method_2<int>("m_suggestWeight");

			public SortableEntityDef(IntPtr address, string className)
				: base(address, className)
			{
			}

			public SortableEntityDef(IntPtr address)
				: this(address, "SortableEntityDef")
			{
			}
		}

		public static List<CardRequirements> s_OrderedCardRequirements => MonoClass.smethod_7<Class251<CardRequirements>>(TritonHs.MainAssemblyPath, "", "DeckMaker", "s_OrderedCardRequirements")?.method_25();

		public static int s_randomChoicePoolSize => MonoClass.smethod_6<int>(TritonHs.MainAssemblyPath, "", "DeckMaker", "s_randomChoicePoolSize");

		public static int s_priorityWeightDifference => MonoClass.smethod_6<int>(TritonHs.MainAssemblyPath, "", "DeckMaker", "s_priorityWeightDifference");

		public DeckMaker(IntPtr address, string className)
			: base(address, className)
		{
		}

		public DeckMaker(IntPtr address)
			: this(address, "DeckMaker")
		{
		}

		public static bool IsMinion(EntityDef e)
		{
			return MonoClass.smethod_14<bool>(TritonHs.MainAssemblyPath, "", "DeckMaker", "IsMinion", new object[1] { e });
		}

		public static bool IsSpell(EntityDef e)
		{
			return MonoClass.smethod_14<bool>(TritonHs.MainAssemblyPath, "", "DeckMaker", "IsSpell", new object[1] { e });
		}

		public static bool IsWeapon(EntityDef e)
		{
			return MonoClass.smethod_14<bool>(TritonHs.MainAssemblyPath, "", "DeckMaker", "IsWeapon", new object[1] { e });
		}

		public static bool HasMinCost(EntityDef e, int minCost)
		{
			return MonoClass.smethod_14<bool>(TritonHs.MainAssemblyPath, "", "DeckMaker", "HasMinCost", new object[2] { e, minCost });
		}

		public static bool HasMaxCost(EntityDef e, int maxCost)
		{
			return MonoClass.smethod_14<bool>(TritonHs.MainAssemblyPath, "", "DeckMaker", "HasMaxCost", new object[2] { e, maxCost });
		}

		public static DeckChoiceFill GetFillCardChoices(CollectionDeck deck, EntityDef referenceCard, int choices, DeckRuleset deckRuleset)
		{
			return MonoClass.smethod_15<DeckChoiceFill>(TritonHs.MainAssemblyPath, "", "DeckMaker", "GetFillCardChoices", new object[4] { deck, referenceCard, choices, deckRuleset });
		}
	}
}
